/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"810A86EA-BB08-4B3A-8932-7BAD38C7C69D"}
 * @AllowToRunInFind
 */
function continuar(event) {
	
	elements.errores.removeAllTabs()
	var res = globals.chequeaVariables()
	if (res[0] == 1)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Error en variables globales : '+res[1],'OK')
		return
	}
	
	var $tipo_asiento = 10
	if (globals.control_asientos_prov($tipo_asiento,globals.gMesAsientos,globals.gAnioAsientos) == 0 )
	{
		return
	}
	
	/** @type {JSFoundSet<db:/contable/asiento_prov_cab>}*/
	var $provisorio = databaseManager.getFoundSet('contable','asiento_prov_cab')
	/** @type {JSFoundSet<db:/infocom/op_cabecera>}*/
	var $op_cab 	= databaseManager.getFoundSet('infocom','op_cabecera')
	var $cols		= ['fecha','documento','error']
	var $errores 	= databaseManager.createEmptyDataSet( 0,  $cols )
	
	if ($op_cab.find() == false)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Ocurrió un error al buscar órdenes de pago','OK')
		return
	}
	
	var $fecha_desde 	= new Date(globals.gAnioAsientos, globals.gMesAsientos-1,1,0,0,0,0)
	var $fecha_hasta 	= new Date(globals.gAnioAsientos, globals.gMesAsientos,0,23,59,59,996)
	var rango 			= utils.dateFormat($fecha_desde,'dd-MM-yyyy') + '...'+ utils.dateFormat($fecha_hasta,'dd-MM-yyyy')
	$op_cab.fecha		= '#' + rango + '|dd-MM-yyyy'  
	$op_cab.codigo_movimiento = 6 || 7
	// $op_cab.marca_anulacion = '^||=' + 0    // Con esto deberia buscar 0 o null  
	
	if ($op_cab.search() == 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No se encontraron movimientos con esas condiciones','OK')
		return
	}
	databaseManager.setAutoSave(false)
	var $cant = databaseManager.getFoundSetCount($op_cab)

	for (var i = 1 ; i <= $cant ; i++)
	{
		if ($op_cab.marca_anulacion != 1)  // se pone aqui porque no los filtra el find
		{
			var $rcd = $op_cab.getRecord(i)
			tipoAsiento_10($rcd , $provisorio,'Pago Varios',$errores, $tipo_asiento)
		}
	}
	
	if ($errores.getMaxRowIndex() > 0) 
	{
		var $fecha_hoy	= utils.dateFormat(new Date(),'dd-MM-yyyy')
		var $periodo	= 'Desde ' + utils.dateFormat($fecha_desde,'dd-MM-yyyy') + ' hasta '  + utils.dateFormat($fecha_hasta,'dd-MM-yyyy')
		var $titulo		= 'Asiento Pagos Varios - ' + $periodo + ' - Fecha Proceso ' + $fecha_hoy
		globals.crearFormErrores('asiento_pagos_varios_10',$errores,$cols,$titulo)
	}
	databaseManager.startTransaction()
	if (databaseManager.saveData()) 
	{
		databaseManager.setAutoSave(true)
		databaseManager.commitTransaction()
	}
	else
	{
		databaseManager.rollbackTransaction()
		globals.DIALOGS.showWarningDialog('Aviso','Ocurrió un error al intentar grabar los cambios. El proceso está incompleto','OK')
	}
}

/**
 * @param {JSRecord<db:/infocom/op_cabecera>} $rcd
 * @param {JSFoundSet<db:/contable/asiento_prov_cab>} $provisorio
 * @param {String} $texto
 * @param {JSDataSet} $errores
 * @param {Number} $tipo_asiento
 * 
 * @properties={typeid:24,uuid:"82B0F005-F40F-4579-9720-A9CA6A2CF1FE"}
 */
function tipoAsiento_10($rcd , $provisorio, $texto, $errores, $tipo_asiento)
{
	$provisorio.newRecord()
	
	$provisorio.moneda 				= 'P'
	$provisorio.moneda_carga 		= 1
	$provisorio.hizo 				= globals.gUsuarioID
	$provisorio.tipo_actualizacion 	= globals.z_conf_asiento_normal
	$provisorio.empresa				= globals.gUservID
	$provisorio.fecha 				= $rcd.fecha
	$provisorio.texto 				= $texto +' - '+ $rcd.letra +'-'+ $rcd.sucursal +'-'+ $rcd.nro_comprobante +' - '+ $rcd.concepto
	$provisorio.subdiario_id 		= 4 // egresos
	$provisorio.mes					= $rcd.fecha.getMonth()+1
	$provisorio.anio				= $rcd.fecha.getFullYear()
	$provisorio.tipo_asiento_id 	= $tipo_asiento
	
	globals.gtotal_asiento = null
	var $dtls = obtenerDetalles($rcd, $errores, $provisorio.texto)
	$provisorio.total = globals.gtotal_asiento
	
	for (var i = 0 ; i < $dtls.length ; i++)
	{
		var det = $provisorio.asiento_prov_cab_to_asiento_prov
		
		det.newRecord()
		
		det.columna 	= $dtls[i][0]
		det.cuentas_id 	= $dtls[i][1]
		det.importe 	= $dtls[i][2]
		det.numero		= 0  // $provisorio.numero
		det.empresa		= globals.gUservID
		det.centro		= 1
		det.division	= 1
		det.leyenda		= $dtls[i][3]   
		det.mes			= $provisorio.mes 
		det.anio		= $provisorio.anio
	}
}

/**
 * @param {JSRecord<db:/infocom/op_cabecera>} $rcd
 * @param {JSDataSet} $errores
 * @param {String} $texto
 * 
 * @return {Object}
 * @properties={typeid:24,uuid:"14B56433-C7B6-431A-8123-62A7C7328120"}
 */
function obtenerDetalles($rcd, $errores, $texto)
{
	var dtls = new Array()
	var tot_d = 0
	var tot_h = 0
	var letra 		= 'D'
	var contrario 	= 'H'
	var imp
	var cta
	var ley
	var error
	if ($rcd.codigo_movimiento == 6)   
	{
		letra 		= 'H'
		contrario 	= 'D'
	}
	
	var $det = $rcd.op_cabecera_to_op_detalle
	var $op_var = $rcd.op_cabecera_to_op_detalle_varios  
	if ($op_var == null && $det == null)    	
	{
		error = new Array(null, null, 'Error en relaciones con detalles')
		$errores.addRow(error)
		return -1
	}

	var $ctos  = databaseManager.getFoundSetCount($det)
	for (var i = 1 ; i <= $ctos ; i++)
	{
		$det.setSelectedIndex(i)

		cta = 999999
		if ($det.op_detalle_to_cuentas_cyb.getSize() != 0)
		{
			if ($det.valor_id == 5 || $det.valor_id == 4)   //  07/06/2012
			{
				if($det.op_detalle_to_cuentas_cyb.plancta_id_val_difer == null) 
				{
					error = new Array(utils.dateFormat($rcd.fecha,'dd-MM-yyyy'), $texto, 'Cuenta contable valores difer. no cargada en cuentas_cyb codigo=' + $det.cuentas_cyb_id)
					$errores.addRow(error)
				}
				else
					cta = $det.op_detalle_to_cuentas_cyb.plancta_id_val_difer
			}	
			else				
			{	
				if ($det.op_detalle_to_cuentas_cyb.plancta_id == null) 
				{
					error = new Array(utils.dateFormat($rcd.fecha,'dd-MM-yyyy'), $texto, 'Cuenta contable no cargada en cuentas_cyb codigo=' + $det.cuentas_cyb_id)
					$errores.addRow(error)
				}
				else
					cta = $det.op_detalle_to_cuentas_cyb.plancta_id	
			}	
		}
		else 
		{
			error = new Array(utils.dateFormat($rcd.fecha,'dd-MM-yyyy'), $texto, 'No existe relacion entre op_detalle y cuentas_cyb')
			$errores.addRow(error)
		}	
 
		ley = ''
		if ($det.op_detalle_to_cuentas_cyb.getSize() != 0)
			ley = $det.op_detalle_to_cuentas_cyb.descripcion + ' - ' + $det.cheque_nro

		imp = $det.importe
		tot_h += imp
		dtls[dtls.length] = new Array(letra, cta, imp, ley)
	}
	
	$ctos 	 = databaseManager.getFoundSetCount($op_var)
	for (var i = 1 ; i <= $ctos ; i++)
	{
		$op_var.setSelectedIndex(i)
		imp = $op_var.importe
		cta = $op_var.plan_id
		ley = $op_var.concepto_varios
		tot_d += imp
		dtls[dtls.length] = new Array(contrario, cta, imp, ley)
	}
	
	if(Math.abs(tot_h - tot_d) > 0.00999999999) 
	{
		error = new Array(utils.dateFormat($rcd.fecha,'dd-MM-yyyy'), $texto, 'Debe distinto a haber')
		$errores.addRow(error)
	}
	else
		globals.gtotal_asiento = tot_d
	return dtls
}
